DevOps
CICD
K8s
Docker
Take a backup of the etcd
cluster and save it to /tmp/etcd-backup.db
這題的題目好短阿,肯定很簡單
前幾天我們有提過,所有K8s objects
的資料都儲存在etcd
之中。定期備份etcd
對於在災難情況下(例如所有Control Plane
節點掛掉)恢復Kubernetes
集群是非常重要的。snapshot file
包含所有Kubernetes
的狀態和關鍵訊息。為了確保Kubernetes
中敏感資料的安全,盡量將snapshot file
進行加密。
這題是考etcd
的集群備份,這題很重要,etcd
的考點幾乎都是集群備份,畢竟這也是etcd
最重要的目的。etcd
備份需要借助K8s
強大的官方文件,參考這裡當中的Backing up an etcd cluster。etcd
的備份有兩種方式:
etcd
支持內建snapshot
,因此備份etcd
集群很容易。可以使用etcdctl snapshot save
命令從集群內物件中獲取,也可以從當前未被etcd process
使用的etcd
資料目錄中複製member/snap/db 文件。etcd
在支持備份的Volume
(例如Amazon Elastic Block Store)上運行,可以通過獲取存Volume
的snapshot來備份。這邊補充一下
Snapshot
的概念好了。Snapshot
又稱為快照,就像照相一樣,在某個時間點,將硬碟目前的整個狀態儲存起來,以作為將來還原的備份依據。Snapshot
是幾乎所有的儲存服務設備都會提供的功能,就像是幫你硬碟上的資料照張像一樣,把這個目前的狀態記錄下來,以備將來還原之用,跟Windows上的系統還原意義差不多。
Souece: https://ithelp.ithome.com.tw/articles/10010377
因為我們還沒有學過Volume
的概念,我們就用第一種方式Built-in snapshot來備份etcd
吧! 具體步驟如下:
etcd
## 下載etcd-client
$ apt install etcd-client
## 先檢查etcd版本
## 使用etcd v3的版本時,需要設置環境變數ETCDCTL_API=3
$ ETCDCTL_API=3 etcdctl version
## 進入etcd檔案目錄
## 因為etcd是static pod,所以etcd檔案目錄即是static pod所在目錄
$ cd /etc/kubernetes/manifests
$ cat etcd.yaml
...
## 找到這些檔案的路徑,作為之後參數使用
- --advertise-client-urls=https://172.17.0.14:2379
- --cert-file=/etc/kubernetes/pki/etcd/server.crt
...
- --key-file=/etc/kubernetes/pki/etcd/server.key
...
...
## 連線到etcd例項,並列出member,須帶入etcd.yaml中的參數
$ ETCDCTL_API=3 etcdctl member list --endpoints https://127.0.0.1:2379 \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
--cacert=/etc/kubernetes/pki/etcd/ca.crt
a9a3a87b9b08ff5e, started, g8master, https://192.168.132.241:2380, https://192.168.132.241:2379
## 以etcdctl snapshot save備份
$ ETCDCTL_API=3 etcdctl snapshot save /tmp/etcd-backup.db \
--endpoints https://127.0.0.1:2379 \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
--cacert=/etc/kubernetes/pki/etcd/ca.crt
Snapshot saved at /tmp/etcd-backup.db
## 檢查備份檔案
$ ETCDCTL_API=3 etcdctl snapshot status /tmp/etcd-backup.db -w table \
--endpoints https://127.0.0.1:2379 \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
--cacert=/etc/kubernetes/pki/etcd/ca.crt
+----------+----------+------------+------------+
| HASH | REVISION | TOTAL KEYS | TOTAL SIZE |
+----------+----------+------------+------------+
| 24b6552d | 5488124 | 1113 | 4.6 MB |
+----------+----------+------------+------------+
etcdctl
is a command line client for etcd
使用export ETCDCTL_API=3
命令將etcdctl client
的ETCDCTL_API
環境變數版本設定為3
因為Kubernetes
集群使用https
,因此需要指定--cert-file
、--key-file
和--ca-file
三個參數,參數檔案都位於 /etc/kubernetes/pki/etcd
目錄下。
至於要怎麼知道參數名稱是--cert
、--key
和--cacert
,它們又代表甚麼意義呢?可以透過ETCDCTL_API=3 etcdctl snapshot save -h
命令查找:
--cert
="" --key
=""--cacert
="" 不加
--endpoints
參數時,默認訪問的是https://127.0.0.1:2379
今天介紹了etcd
的備份方法,etcd
的備份在K8s
中是很重要的部分,考試也會出現,大家要把握住喔!好啦,今天就到這囉~ 謝謝大家~
儲存技術ABC 之 Snapshot
ETCD 使用
Operating etcd clusters for Kubernetes
You can find me on